package edu.qqilin.springframework.beans.factory.config;

import edu.qqilin.springframework.beans.BeansException;

/**
 * Description: Bean 对象的增强者（装修工/质检员）
 * <p>
 * 核心功能： 在 Bean 对象实例化之后执行。提供两个钩子方法：
 * <p>
 * postProcessBeforeInitialization: 初始化前执行。
 * <p>
 * postProcessAfterInitialization: 初始化后执行。
 * <p>
 * 用途： 允许你在对象造出来后，对其进行修改、替换（AOP代理）或包装。
 * @author qqilin1213
 * @version 1.0
 * @date 2025/11/24 20:12
 */
public interface BeanPostProcessor {
    /**
     * 在 Bean 对象执行初始化方法之前，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

    /**
     * 在 Bean 对象执行初始化方法之后，执行此方法
     *
     * @param bean
     * @param beanName
     * @return
     * @throws BeansException
     */
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}
